//11.盛最多水的容器 
//给定一个长度为 n 的整数数组 height 。
//有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
//找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
//返回容器可以储存的最大水量。
//说明：你不能倾斜容器。

//1.暴力解法 ：双重for循环 时间复杂度：O(n^2)  数据过大时，超出时间的限制
int maxArea(int* height, int heightSize) 
{
    int max = 0;
    int w,h;
    for(int i = 0; i < heightSize; i++)
    {
        for(int j = i+1; j < heightSize; j++)
        {
            w = j - i;
            if(height[i] >= height[j])
                h  = height[j];
            else
                h = height[i];
            
            if(h * w > max)
            {
                max = h * w;
            }
        }
    }
    return max;
}

//2.双指针法：左右指针解决  时间复杂度：O(n)
int maxArea(int* height, int heightSize) 
{
    int left = 0;
    int right = heightSize - 1;
    int h,w;

    int MaxArea = 0;

    while(left < right)
    {
        int w = right - left; //计算两点之间的宽度

        //左边数大于右边数时，高度 = 右边的数，并且移动较小的数
        if(height[left] >= height[right])
        {
            h = height[right];
            right--;
        }
        
        //左边数小于右边数时，高度 = 左边的数，并且移动较小的数
        else
        {
            h = height[left];
            left++;
        }

        if(h * w > MaxArea)
        {
            MaxArea = h * w;
        }
    }

    return MaxArea;
}